package demo1;

abstract class Shape{
    //表示这个方法可以不进行实现 被称为抽象方法 类也需为抽象类
    public abstract void draw();
}

//若不想重写这个继承的抽象类的方法，则这个类也改为抽象类即可
abstract class A extends Shape{
    public abstract void testA();
}

//但如果A这个抽象类再次被普通B类继承，此时B这个类需要重写所有未被重写的抽象方法
class B extends A{
    @Override
    public void draw() {

    }

    @Override
    public void testA() {

    }
}

class Rect extends Shape{
    public void draw(){
        System.out.println("画一个矩形");
    }
}

class Triangle extends Shape {
    @Override
    public void draw() {
        System.out.println("画一个三角形");
    }
}

class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("画一个圆圈");
    }
}

public class Test {
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        //Shape shape=new Shape();  不能new一个具体的对象（抽象类不能够被实例化）
        drawMap(new Cycle());
        drawMap(new Rect());
        drawMap(new Triangle());
    }
}
